package com.eds.sms.utils;

import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.sdk.service.dysmsapi20170525.AsyncClient;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.sdk.service.dysmsapi20170525.models.SendSmsResponse;
import com.fasterxml.jackson.core.JsonProcessingException;
import darabonba.core.client.ClientOverrideConfiguration;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class SmsSendUtils {
    //调用.env文件中的ACCESS_KEY_ID
    public static String ACCESS_KEY_ID = System.getenv("ACCESS_KEY_ID");//  阿里云访问密钥ID
    private static String ACCESS_KEY_SECRET =System.getenv("ACCESS_KEY_SECRET");//  阿里云访问密钥
    private static String TEMPLATE_CODE = System.getenv("TEMPLATE_CODE");;//  短信模板CODE
    private static String SIG_NAME = "阿里云短信测试";

    /**
     * 发送短信验证码方法
     *
     * @param phoneNumber 接收短信的手机号码
     * @param sysCodeJson 短信模板参数（通常包含验证码等信息）
     * @return SendSmsResponse 发送短信响应对象
     * @throws JsonProcessingException JSON处理异常
     * @throws ExecutionException      执行异常
     * @throws InterruptedException    中断异常
     */
    public static SendSmsResponse sendSms(String phoneNumber, String sysCodeJson) throws JsonProcessingException, ExecutionException, InterruptedException {
        // 创建静态凭证提供者，用于提供访问阿里云API所需的认证信息
        StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                .accessKeyId(ACCESS_KEY_ID) // 访问密钥ID
                .accessKeySecret(ACCESS_KEY_SECRET) // 访问密钥秘钥
                //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // 使用STS token时取消此行注释
                .build());

        // 配置并创建异步客户端
        AsyncClient client = AsyncClient.builder()
                .credentialsProvider(provider) // 设置凭证提供者
                .overrideConfiguration(
                        ClientOverrideConfiguration.create()
                                .setEndpointOverride("dysmsapi.aliyuncs.com") // 设置服务端点重写
                )
                .build();

        // 构建发送短信请求
        SendSmsRequest sendSmsRequest = SendSmsRequest.builder()
                .phoneNumbers(phoneNumber) // 接收短信的手机号码
                .templateCode(TEMPLATE_CODE) // 短信模板CODE
                .signName(SIG_NAME) // 签名名称
                .templateParam(sysCodeJson) // 模板参数
                .build();

        // 异步发送短信，并获取结果
        CompletableFuture<SendSmsResponse> response = client.sendSms(sendSmsRequest);
        SendSmsResponse resp = response.get(); // 同步获取返回值

        client.close(); // 关闭客户端资源
        return resp; // 返回发送短信的结果
    }
}